package com.william.jdbcplus.core.dialect.ddl.fk;

import com.william.jdbcplus.common.entity.Entity;
import com.william.jdbcplus.core.meta.TableFkInfo;
import com.william.jdbcplus.core.util.datameta.TableMetaFkInfo;

/**
 * 外键接口
 *
 * @author william
 */
public interface IFk {
    /**
     * 新增外键
     *
     * @param clazz
     * @param fkInfo
     * @param <M>
     * @return
     */
    <M extends Entity> String add(Class<M> clazz, TableFkInfo fkInfo);

    /**
     * 删除外键
     *
     * @param clazz
     * @param fkInfo
     * @param <M>
     * @return
     */
    <M extends Entity> String drop(Class<M> clazz, TableFkInfo fkInfo, TableMetaFkInfo metaFkInfo);

    /**
     * 修改外键
     *
     * @param clazz
     * @param fkInfo
     * @param <M>
     * @return
     */
    <M extends Entity> String modify(Class<M> clazz, TableFkInfo fkInfo, TableMetaFkInfo metaFkInfo);

    /**
     * 检查是否与数据库一致
     */
    <M extends Entity> Boolean match(Class<M> clazz, TableFkInfo fkInfo, TableMetaFkInfo metaFkInfo);
}
